package process

import (
	"encoding/json"
	"fmt"
	"learningProject/shangguigu/client/utils"
	message "learningProject/shangguigu/common"
	"net"
	"os"
)

// 显示登陆成功后的界面
func ShowMenu() {
	fmt.Println("-------------登陆成功------------")
	fmt.Println("1、显示在线人数")
	fmt.Println("2、发送信息")
	fmt.Println("3、信息列表")
	fmt.Println("4、退出系统")

	var key int
	var content string
	fmt.Scanf("%d\n", &key)

	// 因为我们总会发消息，所以将smsProcess定义在switch外面
	smsProcess := &SmsProcess{}
	switch key {
	case 1:
		outputOnlineUser()
	case 2:
		fmt.Println("输入要发送的信息")
		fmt.Scanf("%s\n", &content)
		smsProcess.SendGroupMes(content)
	case 3:
		fmt.Println("信息列表")

	case 4:
		fmt.Println("退出系统")
		os.Exit(0)
	default:
		fmt.Println("输入有误")
	}
}

// 和服务器端保持通信
func ServerProcessMes(conn net.Conn) {
	// 创建一个Transfer实例，不停的从服务器读取数据
	tf := &utils.Transfer{
		Conn: conn, // 将UserProcess结构体的Conn赋给utils包下的Transfer结构体
	}
	for {
		// 客户端不停的读取数据
		fmt.Println("客户端等待读取服务器数据")
		mes, err := tf.ReadPkg()
		if err != nil {
			fmt.Println("客户端等待读取服务器数据err", err)
			return
		}

		// 如果读取到消息，执行下一步逻辑
		switch mes.Type {
		case message.NotifyUserStatusMesType: // 有人上线
			// 取出NotifyUserStatusMes
			var notifyUserStatusMes message.NotifyUserStatusMes
			json.Unmarshal([]byte(mes.Data), &notifyUserStatusMes)
			// 将这个用户信息保存到客户端map中
			updateUserStatus(&notifyUserStatusMes)
		case message.SmsMesType: // 群发消息
			outputGroupMes(&mes)
		default:
			fmt.Println("服务端返回未知消息类型")
		}
	}

}
